package apl;

import java.util.ArrayList;
import java.util.Scanner;

import sec.Doorgang;
import sec.Drager;
import sec.Ruimte;
import sec.RuimteManager;

public class RuimteSpel {

	private RuimteManager rmanager = new RuimteManager();
	private Scanner in = new Scanner(System.in);

	private boolean tried = false;
	private Ruimte prevRuimte = null;

	public RuimteSpel() {
		rmanager.addRuimte("Buiten");
		rmanager.addRuimte("Hal");
		rmanager.addRuimte("Keuken");
		rmanager.addRuimte("Woonkamer");
		rmanager.addRuimte("Kelder");
		rmanager.addDrager("Speler");
		rmanager.addDrager("Piet");
		rmanager.addIdentificator("Speler", "101");
		rmanager.setAutorisatie("Speler", 1);
		rmanager.setAutorisatie("Piet", 9001);
		rmanager.addDoorgang("Buiten", "Hal", "Voordeur", 1);
		rmanager.addDoorgang("Hal", "Keuken", "Keukendeur", 1);
		rmanager.addDoorgang("Hal", "Woonkamer", "Woonkamerdeur", 1);
		rmanager.addDoorgang("Woonkamer", "Kelder", "Keldertrap", 10);
		rmanager.setDragerInRuimte("Speler", "Buiten");
		rmanager.setDragerInRuimte("Piet", "Keuken");

	}

	public boolean speel() {
		System.out.println("\n\n\n");
		Ruimte spelerRuimte = getSpelerRuimte();

		if (spelerRuimte.getNaam().equals("Kelder")) {
			System.out.println("je hebt gewonnen! yay");
			return false;
		}
		for (Drager d : rmanager.getDragers()) {
			if (d.getNaam().equals("Piet")) {
				if (spelerRuimte.getAanwezigen().contains(d)) {
					System.out.println("Je ziet Piet hier. hij geeft je autorisatie niveau 100");
					rmanager.setAutorisatie("Speler", 100);
				}
			}
		}

		if (prevRuimte == spelerRuimte) {
			if (tried)
				System.out.println("Je autorisatie niveau is te laag!");
			else
				System.out.println("Invoer is niet goed");
		}
		tried = false;

		if (spelerRuimte.getNaam() == "Buiten")
			System.out.println("Je staat buiten");
		else
			System.out.println("Je staat in de " + spelerRuimte.getNaam());
		for (Doorgang gang : getDoorgangenInRuimte(spelerRuimte)) {
			if (gang.getRuimte1().equals(spelerRuimte))
				System.out.println("Je ziet de " + gang.getId() + "(" + gang.getDetector().getAutorisatie() + ")"
						+ " naar de " + gang.getRuimte2().getNaam());
			else
				System.out.println("Je ziet de " + gang.getId() + "(" + gang.getDetector().getAutorisatie() + ")"
						+ " naar de " + gang.getRuimte1().getNaam());

		}
		prevRuimte = spelerRuimte;
		System.out.println("Welke doorgang wil je door?");
		String input = in.nextLine();
		for (Doorgang gang : getDoorgangenInRuimte(spelerRuimte)) {
			if (gang.getId().equalsIgnoreCase(input)) {
				rmanager.beweegDoorDoorgang("Speler", gang.getId());
				tried = true;
			}
		}
		return true;
	}

	private ArrayList<Doorgang> getDoorgangenInRuimte(Ruimte r) {
		ArrayList<Doorgang> doorgangen = new ArrayList<Doorgang>();
		for (Doorgang gang : rmanager.getDoorgangen()) {
			if ((gang.getRuimte1().equals(r) || gang.getRuimte2().equals(r))) {
				doorgangen.add(gang);
			}
		}
		return doorgangen;
	}

	private Ruimte getSpelerRuimte() {
		for (Ruimte r : rmanager.getRuimtes()) {
			for (Drager d : r.getAanwezigen()) {
				if (d.getNaam().equals("Speler")) {
					return r;
				}
			}
		}
		return null;
	}

}
